package com.hbnu.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hbnu.system.core.base.CommonPage;
import com.hbnu.system.model.dto.CheckBackDTO;
import com.hbnu.system.model.dto.PaperDTO;
import com.hbnu.system.model.dto.PaperTSdto;
import com.hbnu.system.model.entity.Paper;
import com.hbnu.system.model.query.PaperPageQuery;
import com.hbnu.system.model.vo.PaperVO;

import java.io.IOException;

/**
 * <p>
 *  论文服务类
 * </p>
 *
 * @author ${author}
 * @since 2023-05-16
 */
public interface IPaperService extends IService<Paper> {

    /**
     * 新增论文
     *
     * @param paperdto
     * @return 是否成功
     */
    boolean addPaper(PaperDTO paperdto);



    /**
     * 删除论文
     *
     */
    boolean deletePaper(String PID) throws IOException;

    /**
     * 修改论文
     *
     * @param paper
     * @return 是否成功
     */
    boolean updatePaper(Paper paper);


    /**
     * 论文VO分页查看
     */

    /**
     * 根据论文主键查询论文
     *
     * @param paperID
     * @return Paper
     */
    Paper getPaper(String paperID);


    /**
     * 根据论文主键DTO查询论文
     *
     * @param paperID
     * @return Paper
     */
    PaperDTO getPaperDTOById(String paperID);

    /**
     * 论文名称查重
     *
     * @param paper_name
     * @return 是否重复
     */
    boolean checkPaperName(String paper_name);




    /**
     * 院级审核通过
     */
    Boolean collegeCheckPass(String token,String PID);

    /**
     * 院级审核打回
     */
    Boolean collegeCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 校级审核通过
     */
    Boolean schoolCheckPass(String token,String PID);

    /**
     * 校级审核打回
     */
    Boolean schoolCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 论文再度提交
     */
    Boolean ReCommitPaper(String id);
    
    /**
     * 撤回论文
     * 只有在院级审核状态才能撤回，撤回后状态变为草稿
     */
    Boolean withdrawPaper(String id);

    /**
     * 用户查看分页
     * @param paperPageQuery
     * @return
     */
    CommonPage<PaperVO> userGetPapers(PaperPageQuery paperPageQuery);

    /**
     * 导出
     * @param paperPageQuery 查询条件
     * @return 导出数据
     */
    CommonPage<Paper> export(PaperPageQuery paperPageQuery);
    
    /**
     * 暂存论文数据
     * @param paperTSdto 论文暂存DTO
     * @return 是否成功
     */
    boolean saveDraftPaper(PaperTSdto paperTSdto);
}
